#ifndef REGISTERDIALOG_H
#define REGISTERDIALOG_H

#include <QDialog>
#include "httpmgr.h"
#include <QTime>

namespace Ui {
class RegisterDialog;
}

class RegisterDialog : public QDialog
{
    Q_OBJECT

public:
    explicit RegisterDialog(QWidget *parent = nullptr);
    ~RegisterDialog();
    void initHttpHandlers();

private slots:
    void on_get_button_clicked();

    void on_confirm_button_clicked();

    void on_cancel_button_clicked();

    void on_returnButton_clicked();

signals:
    void sigSwitchLogin();

private:
    Ui::RegisterDialog *ui;

    void showTip(QString ss,bool match);
    QMap<ReqId, std::function<void(const QJsonObject&)>> _handlers;

    //记录错误消息的map容器，可以降重，底层是二叉树，便于查找，这里的错误信息并不特别注重于顺序，所以直接使用first便可以展示第一个错误
    QMap<TipErr, QString> _tip_errs;

    void AddTipErr(TipErr te, QString tips);   //增加错误信息

    void DelTipErr(TipErr te);              //清除错误信息


    //检查合法性
    bool checkUserValid();
    bool checkEmailValid();
    bool checkPassValid();
    bool checkConfirmValid();
    bool checkVarifyValid();


    bool checkAllInputNull();
    int _countdown;
    QTimer* _countdown_timer;

    void ChangeTipPage();//同一个Dialog中切换page，方后端返回成功时被调用
public slots:
    void slot_reg_mod_finish(ReqId id, QString res, ErrorCodes err);
};

#endif // REGISTERDIALOG_H
